As mobile computing services as well as powerful mobile computing devices have proliferated, people increasingly view their cell phones and other mobile devices as their communication medium of choice. Mobile based services are wide ranging and include not only basic telecommunications and text messaging services but also web browsing and information retrieval, games, music, and even movie and television viewing. Many people are choosing to use mobile devices and services over traditional desktop devices and wire services.
Designing user interfaces for mobile devices, however, is more complex than designing for desktops. In addition to much smaller screens, limited input capabilities, and limited memory, the number of devices that a mobile based content provider must support to reach potential customers is substantial. Various mobile client platforms have been developed and adopted by different device manufacturers such that a client application conforming to the platform standards can operate on multiple devices. The mobile platform executes on the mobile operating system for the device but, typically provides only basic, common functionality for device communication and interaction. Some platforms may provide more than basic features and functionality but they do not nor are they intended to provide all of the features and functionality found in most mobile client applications. Furthermore, each manufacturer may implement the industry standard in a different way such that an application compatible with one implementation of the standard must be modified in some way to operate on a different implementation of the standard.
Developing a client application that conforms to a wide variety of mobile platforms and that provides a wide range of features and functionality is challenging. It can be particularly difficult for mobile content services that provide a graphic-rich user interface as well as a substantial amount of content. Even with the advent of industry standards for mobile devises, a developer that creates a mobile application must “port” that application to each and every device on which the developer would like the application to run. The developer is dependent on each manufacturer's implementation of industry standards and related requirements. For instance, a mobile service provider may require a developer's application to work on a minimum number of phones. The minimum number may be substantial. Currently, one mobile service provider requires support of 34 phones. The mobile service provider may further define this minimum set of phones by manufacturer and model so the developer knows what phones must be supported (and therefore, requires porting of the application) in order to use the service provider's network. If the developer completes the ports to each phone, the cost may be managed but the developer needs to know and understand the nuances the manufacturer implemented around the industry supported specifications and then make adjustments in the code base to accommodate the manufacturer's implementations on that specific phone. Many developers use external third parties for the porting process because porting is a time-consuming activity and may not be the developer's specialty. Additionally, many mobile service providers require the developer to have each port “certified” (e.g., using National Software Testing Labs mobile certification) in order to be allowed on the network. This requirement is also time-consuming and costly.
A common goal for mobile applications is complete device independence. Device independence, however, often requires tradeoffs with respect to performance as well as features and functionality. There is a need for a mobile client application that supports a graphic intensive content service that offers substantial device independence to allow it to operate on many different mobile devices, and that has acceptable performance characteristics on the mobile devices where it executes. There is a need for a mobile client application that abstracts the user interface from the device and places the logic for the device specifics and the end result interface on a server.